import { useUserStore } from '@/stores/user'
import { ElMessage } from 'element-plus'

/**
 * 检查用户是否有指定权限
 * @param {string} permission 权限标识
 * @returns {boolean} 是否有权限
 */
export function hasPermission(permission) {
  const userStore = useUserStore()
  const permissions = userStore.permissions
  
  // 如果用户拥有所有权限
  if (permissions.includes('*')) {
    return true
  }
  
  return permissions.includes(permission)
}

/**
 * 检查用户是否有指定角色
 * @param {string|string[]} role 角色标识或角色标识数组
 * @returns {boolean} 是否有角色
 */
export function hasRole(role) {
  const userStore = useUserStore()
  const roles = userStore.roles.map(r => r.id)
  
  if (Array.isArray(role)) {
    return role.some(r => roles.includes(r))
  }
  
  return roles.includes(role)
}

/**
 * 检查用户是否有权限访问指定路由
 * @param {Object} route 路由对象
 * @returns {boolean} 是否有权限访问
 */
export function hasRoutePermission(route) {
  const userStore = useUserStore()
  const permissions = userStore.permissions
  
  // 如果路由没有设置权限要求，则允许访问
  if (!route.meta?.permission) {
    return true
  }
  
  // 如果用户拥有所有权限
  if (permissions.includes('*')) {
    return true
  }
  
  // 检查用户是否有路由所需的权限
  return permissions.includes(route.meta.permission)
}

/**
 * 检查权限并显示提示
 * @param {string} permission 权限标识
 * @returns {boolean} 是否有权限
 */
export function checkPermission(permission) {
  const hasPermission = hasPermission(permission)
  if (!hasPermission) {
    ElMessage.warning('您没有权限执行此操作')
  }
  return hasPermission
}

/**
 * 过滤有权限访问的路由
 * @param {Array} routes 路由数组
 * @returns {Array} 过滤后的路由数组
 */
export function filterAsyncRoutes(routes) {
  const res = []
  
  routes.forEach(route => {
    const tmp = { ...route }
    
    if (hasRoutePermission(tmp)) {
      if (tmp.children) {
        tmp.children = filterAsyncRoutes(tmp.children)
      }
      res.push(tmp)
    }
  })
  
  return res
} 